/*给你一个整数数组arr，只有可以将其划分为三个和相等的非空部分时才输出true，
否则输出 false。
解题思路：
1.首先算数组中的数累加和能否被3整除，不能的话为false。
  数组元素逐渐累加，直到加和得到均值（sum/3的值），此时计数器（t）+1。
  将和清零，并继续开始累加，直到第二次加和得到均值，此时计数器（t）+1。
  当找出两个和等于均值的部分后, 数组剩余的部分的和一定也是均值。
  但是考虑到sum = 0的特殊情况, 因此这里列举两种思路：
  1.在循环条件为i<count的时候：
  将和清零，继续重复上述步骤，直至计数器值>=3时，
  当找到等于均值的部分的数量为2(t=2), 且均值为0，若剩下的部分为空集{}，
  依旧会输出True，但这是不符合题意的，因为题目要求为非空。因此需要计数器至少为3，
最后的剩余部分数组中, 仍然可能含有部分和为0的子结构, 因此计数变量cnt>3也成立。
  2.在循环条件为i<count-1的时候：
    当找到等于均值的部分的数量为2(t=2)时即可跳出，因为循环条件确保了剩余部分数组
    至少还有一个元素，因此不可能是空集，从而避免了1所述情况。
*/

#include<stdio.h>
#define Max 100
int main()
{
    int arr[Max]={0};
    int count=0,i=0,sum=0,m=0,t=0,p=0;
    printf("请输入数组,必须为整数,以空格分隔,按其他符号键如s结束\n");
    while(scanf("%d",&arr[count])==1&&count<Max-1)
    //接收输入的整数，并计数+1。判断如果接收到换行符
    //或者当接收的整数超过数组大小或未能成功读取到整数值，则停止循环(getchar()!='\n')
    count++;
    for(i=0;i<count;i++)
    {
        sum=sum+arr[i];
    }
    //求和，如果所有值的累加不能被3整除，则不可以三等分
    m=(sum/3);
    if(sum%3!=0)
    {
        printf("False");
        return 0;
    }
//方法1
  for(i=0,sum=0;i<count;i++)
  {
    sum+=arr[i];
    if(sum==m)
    sum=0,t++;
    if(t>=3)
    {
        p=1;
    }
  }
  /*
    for(i=0,sum=0;i<count-1;i++)
  {
    sum+=arr[i];
    if(sum==m)
    sum=0,t++;
    if(t>=2)
    {
        p=1;
    }
  }//方法2
  */
    if(p)
    printf("True");
    else
    printf("False");
    return 0;
}
